﻿using System;

namespace AbstractFactoryPatterDemo
{
    /// <summary>
    /// 抽象工厂模式:是工厂方法模式的升级版本，在有多个业务品种、业务分类时，通过抽象工厂模式产生需要的
    /// 注意：有N个产品族，在抽象工厂类中就应该有N个创建方法。
    /// </summary>
    class Client
    {
        static void Main(string[] args)
        {
            // 假设我们需要生产 产品A1 产品B1 则我们需要通过具体工厂ConCreateFactory1
            AbstractFactory factory = new ConCreateFactory1();
            AbstractProductA productA = factory.CreateProductA();
            AbstractProductB productB = factory.CreateProductB();

            Console.WriteLine("---------------现在产品切换将由ConCreateFactory2工厂来生产---------------------");
            // 当切换成另一具体工厂ConCreateFactory2来实现时，则由ConCreateFactory2工厂通过拿到对应的产品具体
            factory = new ConCreateFactory2();
            productA = factory.CreateProductA();
            productB = factory.CreateProductB();

            Console.ReadKey();
        }
    }
}